<template>
  <div class="app-echarts" ref="echarts"></div>
</template>

<script>
export default {
  name: 'app-echarts',
  props: {
    // 配置项
    echartConfig: {
      prop: Object,
      required: true,
      default: () => {}
    }
  },
  data() {
    return {
      // 图表实例
      generalChart: null
    }
  },
  watch: {
    echartConfig: {
      deep: true,
      handler() {
        this.updateCharts()
      }
    }
  },
  mounted() {
    this.initChart()
  },
  methods: {
    initChart() {
      // 初始化图表
      this.generalChart = this.$echarts.init(this.$refs['echarts'])
      // 重新计算渲染区域大小
      this.generalChart.resize()
      // 初始化配置
      this.generalChart.setOption(this.echartConfig)
    },
    updateCharts() {
      // 每次初始化前移除之前的图表属性
      this.$refs['echarts'].removeAttribute('_echarts_instance_')
      // 清理缓存
      this.generalChart.clear()
      // 初始化图表
      this.initChart()
    }
  }
}
</script>

<style lang="less" scoped>
.app-echarts {
  width: 100%;
  height: 100%;
}
</style>
